/*
 * @description: 
 * @Author: wzg
 * @Date: 2021-03-18 16:38:06
 * @LastEditTime: 2021-03-19 13:56:46
 */
/* 捕获异常中间件,统一异常处理 */
import resultEnum from '../utils/resultEnum.js';
import { systemLogger } from '../utils/log4.js';
export const catchException = (ctx, next) => {
  return next().catch((err) => {
    console.log(err);
    /* 记录错误日志 */
    systemLogger.error(err);
    /* 
      originalError.message: 'jwt expired' 过期 （关注，处理下）,该message是实在originalError对象下面，其他的都不是
      message: 'Authentication Error' 没有该字段或者为空 （归为其他）
      message: 'invalid signature' 无效签名(可能秘钥修改了) （归为其他）
      message: 'Bad Authorization header format. Format is "Authorization: Bearer <token>"' 格式错误，没传 Bearer （归为其他）
      message: 'jwt malformed'  jwt格式错误，（归为其他）
      other...
    */
    ctx.type = 'json';
    if (401 == err.status) {
      ctx.status = 401;
      /* koa-jwt中的登录异常处理，需要先判断originalError是否存在 */
      if (err.originalError && err.originalError.message === 'jwt expired') {
        ctx.body = {
          code: resultEnum.PLEASE_LOGIN_AGAIN.code,
          msg: resultEnum.PLEASE_LOGIN_AGAIN.msg
        };
      } else {
        ctx.body = {
          code: resultEnum.NOT_LOGGED_IN.code,
          msg: resultEnum.NOT_LOGGED_IN.msg
        };
      }
    } else {
      /* 上面的错误日志不需要记录了 */
      /* TODO 在文件中记录错误信息 */
      // ctx.status = 404;
      ctx.body = {
        code: resultEnum.SERVER_IS_BUSY.code,
        msg: resultEnum.SERVER_IS_BUSY.msg
      };
      console.log(ctx);

    }
  });
}
// export default {
//   catchException
// }